package pers.mine.dao;

import java.util.List;
import java.util.Map;

import pers.mine.dto.QueryHandler;
import pers.mine.po.Comment;
import pers.mine.po.GoodsGroup;
import pers.mine.po.GoodsItem;
import pers.mine.po.Order;

/**
 * 封装 一些表的特殊查询
 * 
 * @author Mine
 * @since 2016年11月27日_下午4:00:09
 */
public interface QueryMapper {

	/**
	 * 条件获取商品
	 */
	List<GoodsItem> queryGoodsItem(QueryHandler qh);

	/**
	 * 条件获取商品组
	 */
	List<GoodsGroup> queryGoodsGroup(QueryHandler qh);

	/**
	 * 条件获取订单
	 */
	List<Order> queryOrder(QueryHandler qh);

	/**
	 * 条件获取评论
	 */
	List<Comment> queryComment(QueryHandler qh);

	/**
	 * 查询商品组id下属所有商品
	 */
	List<GoodsItem> findGoodsItemsByGroupId(Integer id);
	
	/**
	 * 查询商品组id下属所有前台显示商品,带查询
	 */
	List<GoodsItem> findIndexGoodsItemsByGroupId(QueryHandler qh);
	

	/**
	 * 查询指定id商品所属所有商品组
	 */
	List<GoodsGroup> findGroupsByGoodsId(Integer id);

	/**
	 * 查询指定商品销量
	 * SELECT sum(og_sum) sum FROM ordergoods WHERE g_id=3;
	 */
	Integer getSUMForGoodsItemById(Integer id);
	 
	/**
	 * 查询指定商品 评价 平均值
	 * SELECT AVG(mine_comment.c_grade) avg FROM mine_comment WHERE
	 * mine_comment.g_id="1";
	 */
	Double getGradeForGoodsItemById(Integer id);
	/**
	 * 查询指定用户历史消费 总金额
	 */
	Double getCostForMemberById(Integer id);
	/**
	 * 查询指定用户历史消费 订单数
	 */
	Integer getOrderSumForMemberById(Integer id);
	/**
	 * 查询指定用户历史消费 商品总数
	 */
	Integer getBuyGoodsSumForMemberById(Integer id);
	
	/**
	 * 销量排序
	 * 
	 * SELECT * from goodsitem Left outer join (SELECT g_id id,SUM(og_sum) sale
	 * FROM ordergoods GROUP BY g_id) one on goodsitem.g_id=one.id ORDER BY
	 * one.sum desc
	 * */
	List<GoodsItem> queryGoodsItemOrderBySUM(QueryHandler qh);
	/**
	 * 评价排序
	 * 
	 * SELECT * from goodsitem Left outer join (SELECT g_id id, AVG(c_grade) avg
	 * FROM mine_comment GROUP BY g_id) one on goodsitem.g_id=one.id ORDER BY
	 * one.sum desc
	 * */
	List<GoodsItem> queryGoodsItemOrderByGrade(QueryHandler qh);
	/**
	 * 最新上架 SELECT * FROM goodsitem ORDER BY g_shelveDate DESC;
	 */
	List<GoodsItem> queryGoodsItemOrderBySelveDate(QueryHandler qh);
	/**
	 * 没有分类商品 SELECT * FROM goodsitem WHERE g_id not in (SELECT DISTINCT
	 * groupship.goods_id FROM groupship );
	 */
	List<GoodsItem> queryGoodsItemWithNotGroupShip(QueryHandler qh);
	/**
	 * 获取上次limit查询记录总数
	 */
	long findLastRows();
}
